﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace WCF_PASARELA
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "PasarelaService" in code, svc and config file together.
    public class PasarelaService : IPasarelaService
    {
        public void DoWork()
        {
        }
        
        string cadCon;
        public PasarelaService()
        {
            this.cadCon = ConfigurationManager.ConnectionStrings["CNX"].ConnectionString.ToString();
        }

       
        public TransaccionBE ConsultaUno(int sNro_ticket)
        {
            TransaccionBE objRetorno = new TransaccionBE();
            try
            {
                using (SqlConnection oCn = new SqlConnection(this.cadCon))
                {
                    using (SqlCommand oCmd = new SqlCommand("USP_SCO_SEL_Transaccion", oCn))
                    {
                        oCmd.CommandType = CommandType.StoredProcedure;
                        oCmd.Parameters.Clear();
                        oCmd.Parameters.Add("@Nro_Ticket", SqlDbType.BigInt).Value = sNro_ticket;
                        oCmd.Connection = oCn;
                        oCn.Open();
                        SqlDataReader oReader = oCmd.ExecuteReader();
                        if (oReader.HasRows)
                        {
                            oReader.Read();
                            objRetorno.Nro_Ticket = Convert.ToInt32((oReader.GetInt64(oReader.GetOrdinal("Nro_Ticket"))));
                            objRetorno.Numero_Tarjeta = (oReader.GetString(oReader.GetOrdinal("Numero_Tarjeta")));
                            objRetorno.Codigo_Seguridad = (oReader.GetString(oReader.GetOrdinal("Codigo_Seguridad")));
                            objRetorno.Monto = Convert.ToDouble((oReader.GetDecimal(oReader.GetOrdinal("Monto"))));
                            objRetorno.Fecha_Cancelación = (oReader.GetString(oReader.GetOrdinal("Fecha_Cancelacion")));
                            return objRetorno;

                        }
                        else
                        { return null; }
                    }
                }
            }
            catch (Exception)
            {
                return null;
            }
        }


        public TransaccionBE Registrar(TransaccionBE objEntrada)
        {
            TransaccionBE objRetorno = new TransaccionBE();
            var lista = new List<TransaccionBE>();
            lista.Add(new TransaccionBE() { Numero_Tarjeta = "123456789" , Codigo_Seguridad = "1234" });
            lista.Add(new TransaccionBE() { Numero_Tarjeta = "987654321", Codigo_Seguridad = "4321" });
            lista.Add(new TransaccionBE() { Numero_Tarjeta = "111222333", Codigo_Seguridad = "9988" });

            //lista = lista.Where(c => c.Numero_Tarjeta == objEntrada.Numero_Tarjeta).ToList();
            lista = (from c in lista where c.Numero_Tarjeta == objEntrada.Numero_Tarjeta && c.Codigo_Seguridad == objEntrada.Codigo_Seguridad select c).ToList();
            if (lista.Count < 1) {
                objRetorno.Nro_Ticket = 0;
                objRetorno.tipoMensaje = "0";
                objRetorno.mensajeRespuesta = "Alguno de sus datos son incorrectos verifique y vuelva a intentarlo";
                return objEntrada;
            }

            try
            {
                using (SqlConnection oCn = new SqlConnection(this.cadCon))
                {
                    using (SqlCommand oCmd = new SqlCommand("USP_SCO_INS_Transaccion", oCn))
                    {
                        oCmd.CommandType = CommandType.StoredProcedure;
                        oCmd.Parameters.Add("@Numero_Tarjeta", SqlDbType.VarChar, 16).Value = objEntrada.Numero_Tarjeta;
                        oCmd.Parameters.Add("@Codigo_Seguridad", SqlDbType.VarChar, 4).Value = objEntrada.Codigo_Seguridad;
                        oCmd.Parameters.Add("@Monto", SqlDbType.Decimal ).Value = objEntrada.Monto;
                        oCmd.Parameters.Add("@Nro_Ticket", SqlDbType.Int, 0).Direction = ParameterDirection.Output;
                        oCmd.Parameters.Add("@MENSAJE", SqlDbType.VarChar, 200).Direction = ParameterDirection.Output;
                        oCmd.Parameters.Add("@TIPOMENSAJE", SqlDbType.VarChar, 1).Direction = ParameterDirection.Output;
                        oCmd.Connection = oCn;
                        oCn.Open();
                        oCmd.ExecuteNonQuery();
                        objRetorno.mensajeRespuesta = oCmd.Parameters["@MENSAJE"].Value.ToString();
                        objRetorno.tipoMensaje = oCmd.Parameters["@TIPOMENSAJE"].Value.ToString();
                        objRetorno.Nro_Ticket = Convert.ToInt32(oCmd.Parameters["@Nro_Ticket"].Value.ToString());
                        return objRetorno;
                    }
                }
            }
            catch (Exception ex)
            {
                return null;           
            }
        }
    }
}
